namespace TextureSynthesizer {
	[Serializable]
	public ref class TexSynthProps {
	public: enum class eMODELTYPE_ENUM {
		MODELTYPE_USE_HIST_TO_FIND_LOCATION,
		MODELTYPE_USE_BALOON_TO_SELECT_TEXTON
	};
	public: TexSynthProps() {
				m_PatchSize = 7;
				m_GridStep = 2;
				m_filename = "";
				m_TextureWidth = m_TextureHeight = 250;
				m_NormalDistSigma = 25;
				m_NumberOfClusters = 6;
				m_SurroundingHistPad = 30;
				m_UseIntesityForHist = true;
				m_modeltype = eMODELTYPE_ENUM::MODELTYPE_USE_BALOON_TO_SELECT_TEXTON;
				m_debug = true;
				m_TimesToUseModelOne = 15;
			}
	private: int m_TimesToUseModelOne;
	public: property int TimesToUseModelOne
			{
				int get(){ return m_TimesToUseModelOne;}
				void set(int value){m_TimesToUseModelOne = value;}
			}
	private: bool m_debug;
	public: 
		property bool Debug {
			bool get() { return m_debug;}
			void set(bool b) { m_debug = b;}
		}
	private: eMODELTYPE_ENUM m_modeltype;
	public:
		property eMODELTYPE_ENUM ModelType {
			eMODELTYPE_ENUM get() { return m_modeltype;}
			void set(eMODELTYPE_ENUM m) { m_modeltype = m;}
		}
		private: int m_PatchSize;
		public:
		//[DescriptionAttribute("Size of the patch to use in the grid extraction. Patches are NxN size")]
		property int PatchSize
				{
					int get(){ return m_PatchSize;}
					void set(int value){m_PatchSize = value;}
				}
		private: int m_GridStep;
		public:
		//[DescriptionAttribute("step in pixels of the regular grid used in grid extraction")]
		property int GridStep
				{
					int get(){ return m_GridStep;}
					void set(int value){m_GridStep = value;}
				}
	private: System::String^ m_filename;
		public:
		//[DescriptionAttribute("file to work on")]
		property System::String^ Filename
				{
					System::String^ get(){ return m_filename;}
					void set(System::String^ value){m_filename = value;}
				}
		private: int m_TextureWidth;
		public:
		//[DescriptionAttribute("")]
		property int TextureWidth
				{
					int get(){ return m_TextureWidth;}
					void set(int value){m_TextureWidth = value;}
				}
		private: int m_TextureHeight;
		public:
		//[DescriptionAttribute("")]
		property int TextureHeight
				{
					int get(){ return m_TextureHeight;}
					void set(int value){m_TextureHeight = value;}
				}

		private: int m_NormalDistSigma;
		public:
		//[DescriptionAttribute("")]
		property int NormalDistSigma
				{
					int get(){ return m_NormalDistSigma;}
					void set(int value){m_NormalDistSigma = value;}
				}

		private: int m_SurroundingHistPad;
		public:
		//[DescriptionAttribute("")]
		property int SurroundingHistPad
				{
					int get(){ return m_SurroundingHistPad;}
					void set(int value){m_SurroundingHistPad = value;}
				}

		private: unsigned int m_NumberOfClusters;
		public:
		//[DescriptionAttribute("")]
		property unsigned int NumberOfClusters
				{
					unsigned int get(){ return m_NumberOfClusters;}
					void set(unsigned int value){m_NumberOfClusters = System::Math::Min((int)value,(int)12);}
				}
		private: bool m_UseIntesityForHist;
		public:
		//[DescriptionAttribute("")]
		property bool UseIntesityForHist
				{
					bool get(){ return m_UseIntesityForHist;}
					void set(bool value){m_UseIntesityForHist = value;}
				}

	};
}